[INFO] cloning repository https://github.com/dstanek/am
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/dstanek/am" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdstanek%2Fam", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdstanek%2Fam'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d7ae739908cc82ea92f29fe5ace712c8f4f9a5b2
[INFO] testing dstanek/am against master#f9988fefd3add01f414f52b414308e7872622fee for pr-155114
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdstanek%2Fam" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/dstanek/am
[INFO] removed 0 missing tests
[INFO] finished tweaking git repo https://github.com/dstanek/am
[INFO] tweaked toml for git repo https://github.com/dstanek/am written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/dstanek/am on toolchain f9988fefd3add01f414f52b414308e7872622fee
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/dstanek/am already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded which v6.0.3
[INFO] [stderr]   Downloaded smart-default v0.7.1
[INFO] [stderr]   Downloaded winsafe v0.0.19
[INFO] [stderr]   Downloaded sealed v0.5.0
[INFO] [stderr]   Downloaded peg v0.6.3
[INFO] [stderr]   Downloaded terminal_size v0.4.4
[INFO] [stderr]   Downloaded nom_locate v4.2.0
[INFO] [stderr]   Downloaded drain_filter_polyfill v0.1.3
[INFO] [stderr]   Downloaded synthez v0.3.1
[INFO] [stderr]   Downloaded typed-builder-macro v0.15.2
[INFO] [stderr]   Downloaded cucumber-expressions v0.3.0
[INFO] [stderr]   Downloaded synthez-core v0.3.1
[INFO] [stderr]   Downloaded synthez-codegen v0.3.1
[INFO] [stderr]   Downloaded cucumber-codegen v0.21.1
[INFO] [stderr]   Downloaded peg-runtime v0.6.3
[INFO] [stderr]   Downloaded cucumber v0.21.1
[INFO] [stderr]   Downloaded gherkin v0.14.0
[INFO] [stderr]   Downloaded bytecount v0.6.9
[INFO] [stderr]   Downloaded peg-macros v0.6.3
[INFO] [stderr]   Downloaded console v0.15.11
[INFO] [stderr]   Downloaded typed-builder v0.15.2
[INFO] [stderr]   Downloaded inventory v0.3.22
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] d59467e02afd0f466d9ab5ddd196088d0cf1c161329f3edffab72791ea5a4edc
[INFO] running `Command { std: "docker" "start" "-a" "d59467e02afd0f466d9ab5ddd196088d0cf1c161329f3edffab72791ea5a4edc", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d59467e02afd0f466d9ab5ddd196088d0cf1c161329f3edffab72791ea5a4edc", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d59467e02afd0f466d9ab5ddd196088d0cf1c161329f3edffab72791ea5a4edc", kill_on_drop: false }`
[INFO] [stdout] d59467e02afd0f466d9ab5ddd196088d0cf1c161329f3edffab72791ea5a4edc
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 323a7ef6bfb659c5c384b59b2982710d623972d1501c3942b8b332d2041bc02e
[INFO] running `Command { std: "docker" "start" "-a" "323a7ef6bfb659c5c384b59b2982710d623972d1501c3942b8b332d2041bc02e", kill_on_drop: false }`
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling home v0.5.12
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling which v6.0.3
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling am v0.5.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 14.22s
[INFO] running `Command { std: "docker" "inspect" "323a7ef6bfb659c5c384b59b2982710d623972d1501c3942b8b332d2041bc02e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "323a7ef6bfb659c5c384b59b2982710d623972d1501c3942b8b332d2041bc02e", kill_on_drop: false }`
[INFO] [stdout] 323a7ef6bfb659c5c384b59b2982710d623972d1501c3942b8b332d2041bc02e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 2e3d634a4e4b0c9905e8abf18c5687315974541f8536a4e83ef69a71b20deeb7
[INFO] running `Command { std: "docker" "start" "-a" "2e3d634a4e4b0c9905e8abf18c5687315974541f8536a4e83ef69a71b20deeb7", kill_on_drop: false }`
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling bytecount v0.6.9
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling regex-syntax v0.7.5
[INFO] [stderr]    Compiling peg-runtime v0.6.3
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling inflections v1.1.1
[INFO] [stderr]    Compiling inventory v0.3.22
[INFO] [stderr]    Compiling drain_filter_polyfill v0.1.3
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling humantime v2.3.0
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling which v6.0.3
[INFO] [stderr]    Compiling peg-macros v0.6.3
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling console v0.15.11
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling peg v0.6.3
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling nom_locate v4.2.0
[INFO] [stderr]    Compiling terminal_size v0.4.4
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling sealed v0.5.0
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling clap_derive v4.6.0
[INFO] [stderr]    Compiling typed-builder-macro v0.15.2
[INFO] [stderr]    Compiling pin-project-internal v1.1.11
[INFO] [stderr]    Compiling smart-default v0.7.1
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling synthez-core v0.3.1
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling typed-builder v0.15.2
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling synthez-codegen v0.3.1
[INFO] [stderr]    Compiling pin-project v1.1.11
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling ignore v0.4.25
[INFO] [stderr]    Compiling synthez v0.3.1
[INFO] [stderr]    Compiling lazy-regex-proc_macros v3.6.0
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling cucumber-expressions v0.3.0
[INFO] [stderr]    Compiling globwalk v0.9.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling lazy-regex v3.6.0
[INFO] [stderr]    Compiling cucumber-codegen v0.21.1
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling gherkin v0.14.0
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling cucumber v0.21.1
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling am v0.5.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 48.00s
[INFO] running `Command { std: "docker" "inspect" "2e3d634a4e4b0c9905e8abf18c5687315974541f8536a4e83ef69a71b20deeb7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2e3d634a4e4b0c9905e8abf18c5687315974541f8536a4e83ef69a71b20deeb7", kill_on_drop: false }`
[INFO] [stdout] 2e3d634a4e4b0c9905e8abf18c5687315974541f8536a4e83ef69a71b20deeb7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+f9988fefd3add01f414f52b414308e7872622fee" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] bd6d31ba0eb6552bf953cfda4a81df9d64264cd4cc536c4b8e5ca11da64d498b
[INFO] running `Command { std: "docker" "start" "-a" "bd6d31ba0eb6552bf953cfda4a81df9d64264cd4cc536c4b8e5ca11da64d498b", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.23s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/am-0c4f0e811c4ba3a1)
[INFO] [stdout] 
[INFO] [stdout] running 127 tests
[INFO] [stdout] test cli::tests::invalid_chars_rejected ... ok
[INFO] [stdout] test cli::tests::slug_must_start_with_alphanumeric ... ok
[INFO] [stdout] test cli::tests::slug_too_long_rejected ... ok
[INFO] [stdout] test command::tests::run_command_error_includes_binary_name ... ok
[INFO] [stdout] test cli::tests::valid_slug_accepted ... ok
[INFO] [stdout] test cli::tests::empty_slug_rejected ... ok
[INFO] [stdout] test command::tests::run_command_failure ... ok
[INFO] [stdout] test command::tests::run_built_command_failure ... ok
[INFO] [stdout] test command::tests::run_command_output_failure ... ok
[INFO] [stdout] test config::tests::container_user_with_path_traversal_rejected ... ok
[INFO] [stdout] test config::tests::env_entry_starting_with_dash_rejected ... ok
[INFO] [stdout] test config::tests::env_entry_starting_with_digit_rejected ... ok
[INFO] [stdout] test config::tests::env_entry_with_space_in_name_rejected ... ok
[INFO] [stdout] test command::tests::run_built_command_output_failure ... ok
[INFO] [stdout] test config::tests::agent_image_overridden_in_project_config ... ok
[INFO] [stdout] test config::tests::agent_images_merged_across_global_and_project ... ok
[INFO] [stdout] test config::tests::env_var_can_override_container_user ... ok
[INFO] [stdout] test config::tests::defaults_when_no_config_files ... ok
[INFO] [stdout] test config::tests::env_vars_override_project_config ... ok
[INFO] [stdout] test config::tests::global_config_path_falls_back_to_home_dot_config ... ok
[INFO] [stdout] test config::tests::global_config_path_uses_xdg_config_home ... ok
[INFO] [stdout] test config::tests::load_with_global_errors_on_invalid_container_user_in_env ... ok
[INFO] [stdout] test config::tests::resolve_image_container_image_overrides_agent ... ok
[INFO] [stdout] test config::tests::resolve_image_returns_none_for_unknown_agent ... ok
[INFO] [stdout] test config::tests::resolve_image_uses_agent_mapping ... ok
[INFO] [stdout] test config::tests::valid_container_users_accepted ... ok
[INFO] [stdout] test config::tests::valid_env_entries_accepted ... ok
[INFO] [stdout] test container::tests::agent_auto_flags_claude_returns_skip_permissions ... ok
[INFO] [stdout] test command::tests::run_built_command_success ... ok
[INFO] [stdout] test command::tests::run_built_command_output_success ... ok
[INFO] [stdout] test command::tests::run_command_output_success ... ok
[INFO] [stdout] test container::tests::agent_auto_flags_non_claude_agents_return_empty ... ok
[INFO] [stdout] test config::tests::load_with_global_errors_on_bad_env_entry ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_required_flags ... ok
[INFO] [stdout] test command::tests::run_command_success ... ok
[INFO] [stdout] test container::tests::build_run_command_mounts_colocated_git_when_set ... ok
[INFO] [stdout] test config::tests::project_config_inherits_unset_global_fields ... ok
[INFO] [stdout] test container::tests::build_run_command_mounts_use_host_paths ... ok
[INFO] [stdout] test container::tests::build_run_command_network_none ... ok
[INFO] [stdout] test container::tests::build_run_command_no_selinux_z_for_docker ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_claude_mount_when_active ... ok
[INFO] [stdout] test container::tests::build_run_command_selinux_z_on_linux_podman ... ok
[INFO] [stdout] test config::tests::write_defaults_content_is_valid_toml ... ok
[INFO] [stdout] test config::tests::project_config_overrides_global ... ok
[INFO] [stdout] test container::tests::detect_runtime_explicit_docker_errors_when_not_found ... ok
[INFO] [stdout] test config::tests::load_with_global_errors_on_invalid_container_user_in_file ... ok
[INFO] [stdout] test container::tests::detect_runtime_auto_errors_when_neither_found ... ok
[INFO] [stdout] test container::tests::known_agent_parse_known_agents_ok ... ok
[INFO] [stdout] test container::tests::known_agent_parse_unknown_errors ... ok
[INFO] [stdout] test container::tests::build_run_command_env_passthrough ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_codex_api_key_env ... ok
[INFO] [stdout] test container::tests::detect_runtime_explicit_docker_finds_docker ... ok
[INFO] [stdout] test container::tests::build_run_command_includes_all_mounts ... ok
[INFO] [stdout] test container::tests::codex_returns_no_mount ... ok
[INFO] [stdout] test container::tests::detect_runtime_auto_falls_back_to_docker ... ok
[INFO] [stdout] test config::tests::write_defaults_creates_file_and_parent_dirs ... ok
[INFO] [stdout] test container::tests::detect_runtime_explicit_podman_errors_when_not_found ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_claude_fails_when_dir_missing ... ok
[INFO] [stdout] test container::tests::known_agent_display_matches_parse_input ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_copilot_returns_mounts_and_env ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_codex_fails_when_key_empty ... ok
[INFO] [stdout] test container::tests::resolve_mounts_includes_preflighted_agent_auth_for_claude ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_codex_ok_when_key_set ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_copilot_fails_when_gh_dir_missing ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_gemini_fails_when_dir_missing ... ok
[INFO] [stdout] test error::tests::auto_requires_agent_mentions_agent ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_gemini_ok_when_dir_exists ... ok
[INFO] [stdout] test error::tests::auto_requires_container_mentions_no_container ... ok
[INFO] [stdout] test error::tests::config_error_includes_message ... ok
[INFO] [stdout] test error::tests::container_error_includes_message ... ok
[INFO] [stdout] test error::tests::container_image_not_configured_mentions_agent ... ok
[INFO] [stdout] test error::tests::container_runtime_not_found_mentions_podman ... ok
[INFO] [stdout] test error::tests::io_error_converts_from_std ... ok
[INFO] [stdout] test container::tests::remove_container_sends_rm_command ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_claude_defaults_to_dot_claude ... ok
[INFO] [stdout] test error::tests::not_in_repo_formats_correctly ... ok
[INFO] [stdout] test error::tests::not_in_tmux_formats_correctly ... ok
[INFO] [stdout] test error::tests::slug_already_exists_includes_slug ... ok
[INFO] [stdout] test error::tests::slug_not_found_includes_slug ... ok
[INFO] [stdout] test error::tests::worktree_error_includes_message ... ok
[INFO] [stdout] test error::tests::tmux_error_includes_message ... ok
[INFO] [stdout] test session::tests::find_session_returns_none_for_missing_slug ... ok
[INFO] [stdout] test container::tests::detect_runtime_auto_finds_podman ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_claude_ok_when_dir_exists ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_claude_uses_claude_config_dir_when_set ... ok
[INFO] [stdout] test session::tests::add_duplicate_slug_errors ... ok
[INFO] [stdout] test session::tests::missing_sessions_file_returns_empty_list ... ok
[INFO] [stdout] test session::tests::remove_nonexistent_slug_errors ... ok
[INFO] [stdout] test session::tests::add_and_find_session ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_gemini_returns_dot_gemini ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_copilot_container_paths_match ... ok
[INFO] [stdout] test container::tests::resolve_agent_auth_copilot_returns_both_dirs ... ok
[INFO] [stdout] test session::tests::sessions_roundtrip_json ... ok
[INFO] [stdout] test tmux::tests::create_window_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::get_pane_id_formats_correctly ... ok
[INFO] [stdout] test session::tests::remove_session_success ... ok
[INFO] [stdout] test tmux::tests::current_pane_path_sends_display_message ... ok
[INFO] [stdout] test container::tests::resolve_mounts_git_paths ... ok
[INFO] [stdout] test tmux::tests::current_window_name_sends_display_message ... ok
[INFO] [stdout] test tmux::tests::is_in_tmux_false_when_tmux_not_set ... ok
[INFO] [stdout] test tmux::tests::is_in_tmux_true_when_tmux_set ... ok
[INFO] [stdout] test tmux::tests::kill_pane_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::kill_window_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::rename_window_with_target_passes_t_flag ... ok
[INFO] [stdout] test tmux::tests::rename_window_without_target_omits_t_flag ... ok
[INFO] [stdout] test worktree::tests::create_jj_workspace_returns_correct_path ... ok
[INFO] [stdout] test container::tests::preflight_agent_auth_codex_fails_when_key_missing ... ok
[INFO] [stdout] test container::tests::resolve_mounts_jj_colocated_sets_git_host ... ok
[INFO] [stdout] test container::tests::resolve_mounts_jj_non_colocated_no_git_host ... ok
[INFO] [stdout] test tmux::tests::select_pane_sends_correct_command ... ok
[INFO] [stdout] test worktree::tests::create_jj_workspace_runs_correct_command ... ok
[INFO] [stdout] test worktree::tests::git_worktree_has_changes_returns_false_for_nonexistent_path ... ok
[INFO] [stdout] test tmux::tests::select_window_sends_correct_command ... ok
[INFO] [stdout] test container::tests::stop_container_sends_stop_command ... ok
[INFO] [stdout] test worktree::tests::remove_jj_workspace_calls_forget_and_removes_directory ... ok
[INFO] [stdout] test tmux::tests::send_keys_sends_correct_command ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_errors_on_unborn_branch ... ok
[INFO] [stdout] test worktree::tests::remove_jj_workspace_succeeds_when_directory_already_gone ... ok
[INFO] [stdout] test tmux::tests::split_window_horizontal_sends_correct_command ... ok
[INFO] [stdout] test tmux::tests::split_window_passes_percent_flag ... ok
[INFO] [stdout] test tmux::tests::split_window_vertical_sends_correct_command ... ok
[INFO] [stdout] test worktree::tests::git_worktree_has_changes_returns_false_for_clean_worktree ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_supports_non_utf8_repo_paths ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_duplicate_slug_errors ... ok
[INFO] [stdout] test worktree::tests::remove_git_worktree_removes_directory_and_branch ... ok
[INFO] [stdout] test worktree::tests::create_git_worktree_creates_branch_and_directory ... ok
[INFO] [stdout] test worktree::tests::git_worktree_has_changes_returns_true_when_file_modified ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 127 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/cucumber.rs (/opt/rustwide/target/debug/deps/cucumber-48ade2ea055a460f)
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpnnLMoZ/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout] Feature: container integration — session isolation with a container runtime
[INFO] [stdout]   Scenario: start with container records container metadata in the session
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And am init has been run
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔> And I am using a mock container runtime
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "container: am-my-feature"
[INFO] [stdout]    ✔  And the session file contains "container"
[INFO] [stdout]    ✔  And the mock tmux log contains "send-keys"
[INFO] [stdout]   Scenario: start with --no-container skips container setup
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmphCEdt8/.git/
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And am init has been run
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔> And I am using a mock container runtime
[INFO] [stdout]    ✔  When I run "am start my-feature --no-container"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the session file contains "my-feature"
[INFO] [stdout]    ✔  And the session file does not contain "podman"
[INFO] [stdout]   Scenario: destroy stops and removes the container
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpxRNRJq/.git/
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And am init has been run
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔> And I am using a mock container runtime
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy --force my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the mock podman log contains "stop"
[INFO] [stdout]    ✔  And the mock podman log contains "rm"
[INFO] [stdout]    ✔  And the session file does not contain "my-feature"
[INFO] [stdout] Feature: am destroy — remove a session and its worktree
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpfNWUvu/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]   Scenario: destroy with --force removes the worktree and session record
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy --force my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Destroyed session 'my-feature'"
[INFO] [stdout]    ✔  And the worktree ".am/worktrees/my-feature" does not exist
[INFO] [stdout]    ✔  And the session file does not contain "my-feature"
[INFO] [stdout]   Scenario: destroy fails when the session does not exist
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpvmXF5b/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  When I run "am destroy --force no-such-session"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not found"
[INFO] [stdout]   Scenario: destroy without --force aborts when user says no
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpNv4Pr6/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy my-feature" with input "n"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Aborted"
[INFO] [stdout]    ✔  And a worktree exists at ".am/worktrees/my-feature"
[INFO] [stdout]    ✔  And the session file contains "my-feature"
[INFO] [stdout]   Scenario: destroy without --force proceeds when user confirms
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp0AaiFQ/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am destroy my-feature" with input "y"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the worktree ".am/worktrees/my-feature" does not exist
[INFO] [stdout]    ✔  And the session file does not contain "my-feature"
[INFO] [stdout] Feature: error handling — clear, early errors for invalid usage
[INFO] [stdout]   Scenario: start outside a repo fails with a clear message
[INFO] [stdout]    ✔  Given no git repository
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not in a git or jj repository"
[INFO] [stdout]   Scenario: start with an invalid slug fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpLdl3ay/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start INVALID-SLUG"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]   Scenario: start with an unknown agent fails before creating any worktree
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpcPKcyh/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start my-feature --agent bogus-agent"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "bogus-agent"
[INFO] [stdout]    ✔  And the worktree ".am/worktrees/my-feature" does not exist
[INFO] [stdout]   Scenario: attach with an unknown session fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpqLTeCF/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am attach no-such-session"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not found"
[INFO] [stdout]   Scenario: attach when not inside tmux fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpiYYKJH/.git/
[INFO] [stdout] [master (root-commit) f7d33cd] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  And a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am attach my-feature"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "tmux"
[INFO] [stdout]   Scenario: run when not inside tmux fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmplLKu7o/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  And a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am run my-feature claude"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "tmux"
[INFO] [stdout] Feature: full session lifecycle
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp9YjWdu/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]   Scenario: start then list then destroy
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "my-feature"
[INFO] [stdout]    ✔  When I run "am destroy --force my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "No active sessions"
[INFO] [stdout]   Scenario: multiple sessions can coexist
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmprFnMk4/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am start feature-a"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am start feature-b"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "feature-a"
[INFO] [stdout]    ✔  And the output contains "feature-b"
[INFO] [stdout] Feature: am generate-config — print global config template
[INFO] [stdout]   Scenario: prints a TOML config template with all sections
[INFO] [stdout]    ✔  When I run "am generate-config"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "[container]"
[INFO] [stdout]    ✔  And the output contains "[tmux]"
[INFO] [stdout]    ✔  And the output contains "AM_CONTAINER_USER"
[INFO] [stdout]    ✔  And the output contains "username inside the container"
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpEHrK4H/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout] Feature: am init — initialize am in a repo
[INFO] [stdout]   Scenario: init creates the .am directory and config files
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  When I run "am init"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the file ".am/config.toml" exists
[INFO] [stdout]    ✔  And the file ".am/sessions.json" exists
[INFO] [stdout]    ✔  And the file ".gitignore" contains ".am/"
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpbCpZ4W/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]   Scenario: init is idempotent when run twice
[INFO] [stdout]    ✔  Given a git repository
[INFO] [stdout]    ✔  And am init has been run
[INFO] [stdout]    ✔  When I run "am init"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "already exists"
[INFO] [stdout]   Scenario: init fails outside a repo
[INFO] [stdout]    ✔  Given no git repository
[INFO] [stdout]    ✔  When I run "am init"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "not in a git or jj repository"
[INFO] [stdout] Feature: jj workspace support — sessions in jj repos
[INFO] [stdout]   Scenario: start creates a jj workspace and records the session
[INFO] [stdout]    ✘> Given a jj repository
[INFO] [stdout]       Step failed:
[INFO] [stdout]       Defined: tests/features/jj.feature:4:5
[INFO] [stdout]       Matched: tests/cucumber.rs:188:1
[INFO] [stdout]       Step panicked. Captured output: failed to spawn jj: Os { code: 2, kind: NotFound, message: "No such file or directory" }
[INFO] [stdout]   Scenario: destroy removes the jj workspace and session record
[INFO] [stdout]    ✘> Given a jj repository
[INFO] [stdout]       Step failed:
[INFO] [stdout]       Defined: tests/features/jj.feature:4:5
[INFO] [stdout]       Matched: tests/cucumber.rs:188:1
[INFO] [stdout]       Step panicked. Captured output: failed to spawn jj: Os { code: 2, kind: NotFound, message: "No such file or directory" }
[INFO] [stdout] Feature: am list — display active sessions
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpqNxDP2/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]   Scenario: list reports no sessions when none exist
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "No active sessions"
[INFO] [stdout]   Scenario: list shows an existing session
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpoHnbDk/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am list"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "my-feature"
[INFO] [stdout] Feature: am start — create an isolated agent session
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpdNjybm/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]   Scenario: start a session creates a worktree and records state
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And a worktree exists at ".am/worktrees/my-feature"
[INFO] [stdout]    ✔  And the session file contains "my-feature"
[INFO] [stdout]   Scenario: starting a duplicate session fails
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpe5VSdY/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command fails
[INFO] [stdout]    ✔  And the output contains "already exists"
[INFO] [stdout] Feature: am start and am attach with tmux
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpYA6EWd/.git/
[INFO] [stdout] [master (root-commit) f1fb74d] chore: initial commit
[INFO] [stdout]   Scenario: start renames the current window and splits it
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔  When I run "am start my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Started session 'my-feature'"
[INFO] [stdout]    ✔  And the mock tmux log contains "rename-window"
[INFO] [stdout]    ✔  And the mock tmux log contains "am-my-feature"
[INFO] [stdout]    ✔  And the mock tmux log contains "split-window"
[INFO] [stdout]   Scenario: attach switches to the session window
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmpA6gMFO/.git/
[INFO] [stdout] [master (root-commit) 01ec636] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am attach my-feature"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "my-feature"
[INFO] [stdout]    ✔  And the mock tmux log contains "select-window"
[INFO] [stdout]   Scenario: run sends an agent command to the session's agent pane
[INFO] [stderr] hint: Using 'master' as the name for the initial branch. This default branch name
[INFO] [stderr] hint: is subject to change. To configure the initial branch name to use in all
[INFO] [stderr] hint: of your new repositories, which will suppress this warning, call:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git config --global init.defaultBranch <name>
[INFO] [stderr] hint: 
[INFO] [stderr] hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
[INFO] [stderr] hint: 'development'. The just-created branch can be renamed via this command:
[INFO] [stderr] hint: 
[INFO] [stderr] hint: 	git branch -m <name>
[INFO] [stdout] Initialized empty Git repository in /tmp/.tmp20MhNV/.git/
[INFO] [stdout] [master (root-commit) 01ec636] chore: initial commit
[INFO] [stdout]    ✔> Given a git repository
[INFO] [stdout]    ✔> And I am inside a tmux session
[INFO] [stdout]    ✔  Given a session "my-feature" has been started
[INFO] [stdout]    ✔  When I run "am run my-feature claude"
[INFO] [stdout]    ✔  Then the command succeeds
[INFO] [stdout]    ✔  And the output contains "Launched 'claude'"
[INFO] [stdout]    ✔  And the mock tmux log contains "send-keys"
[INFO] [stdout]    ✔  And the mock tmux log contains "claude"
[INFO] [stdout] [Summary]
[INFO] [stdout] 10 features
[INFO] [stdout] 28 scenarios (26 passed, 2 failed)
[INFO] [stdout] 162 steps (160 passed, 2 failed)
[INFO] running `Command { std: "docker" "inspect" "bd6d31ba0eb6552bf953cfda4a81df9d64264cd4cc536c4b8e5ca11da64d498b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "bd6d31ba0eb6552bf953cfda4a81df9d64264cd4cc536c4b8e5ca11da64d498b", kill_on_drop: false }`
[INFO] [stdout] bd6d31ba0eb6552bf953cfda4a81df9d64264cd4cc536c4b8e5ca11da64d498b
